package poo.esempi;
import poo.razionali.*;
import java.util.*;

public class TR{//Test Razionali
   static String linea;
   static int i;
   static Razionale leggiRazionale(){
      if( linea.charAt( i )=='(' ){
        i++; Razionale r=valuta(); i++; return r;
      }
      int j=linea.indexOf('/',i);
      int num=Integer.parseInt( linea.substring(i,j) );
      j++;//salta /
      i=j;
      if( linea.charAt(j)=='+' || linea.charAt(j)=='-' ) j++;
      while( j<linea.length() &&
             '0'<=linea.charAt(j) && linea.charAt(j)<='9' ) j++;
      int den=Integer.parseInt( linea.substring(i,j) );
      i=j;
      return new Razionale( num, den );
   }//leggiRazionale
   static Razionale valuta(){
      Razionale ris=leggiRazionale();
      for(;;){
         if( i==linea.length() || linea.charAt(i)==')' ) break;
         char op=linea.charAt(i); i++;
         Razionale r=leggiRazionale();
         switch( op ){
            case '+': ris=ris.add(r); break;
            case '-': ris=ris.sub(r); break;
            case '*': ris=ris.mul(r); break;
            case ':': ris=ris.div(r); break;
            default: System.out.println("Operatore illegale");
                     System.exit(-1);
         }
      }
      return ris;
   }//valuta
   public static void main( String []args ){
      System.out.println("Valutatore di espressione razionali." );
      System.out.println("Fornisci un'espressione senza spazi intermedi: es. 5/3-4/9");
      System.out.println("La valutazione procede da sinistra a destra.");
      System.out.println("Per recuperare la priorita' degli operatori, utilizzare parentesi: es. 5/3-(4/9*2/5)");
      Scanner sc=new Scanner( System.in );
      linea=sc.nextLine();
      if( linea==null || linea.length()==0 ) System.exit(0);
      i=0;
      Razionale ris=valuta();
      System.out.println(linea+"="+ris);
      sc.close();
   }//main
}//TR

